package com.etc.controller;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.config.AlipayConfig;
import com.etc.entity.Record;
import com.etc.entity.Unpaid;
import com.etc.entity.User;
import com.etc.service.RecorddetailsService;
import com.etc.service.UserRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.math.BigDecimal;
import java.util.Date;

@Controller
@RequestMapping("alipay")
public class AilpayController {
    @Autowired
    private UserRecordService userRecordService;
    @Autowired
    private RecorddetailsService recorddetailsService;

    @RequestMapping(value = "comsume/{amount}/{seats}")
    public ModelAndView getMoney(@PathVariable("amount") String amount, @PathVariable("seats") String seats,
                                 HttpServletRequest request, HttpServletResponse response, HttpSession session, @CookieValue("cid")String cid,@CookieValue("price")String price) {
        ModelAndView md = new ModelAndView();

            User user=(User)session.getAttribute("user");
            String allprice=Double.parseDouble(price)*Double.parseDouble(amount)+"";
            Date date=new Date();
            Record record=new Record(Integer.parseInt(cid),user.getUserid(),date,new BigDecimal(allprice));
            recorddetailsService.reTran(record,seats.split(","));
            int rid = record.getRid();
            Unpaid unpaid=new Unpaid(date,rid);


            userRecordService.AddUnpaid(unpaid);

            //把unpaid中的uid存到cookie
            Cookie uid_cookie = new Cookie("uid", String.valueOf(unpaid.getUid()).trim());
            uid_cookie.setMaxAge(30 * 60);// 设置为30min
            uid_cookie.setPath("/");
            response.addCookie(uid_cookie);
            //总支付价格



            AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id,
                    AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key,
                    AlipayConfig.sign_type);

            // 设置请求参数
            AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
            alipayRequest.setReturnUrl(AlipayConfig.return_url);
            alipayRequest.setNotifyUrl(AlipayConfig.notify_url);


            // 商户订单号，商户网站订单系统中唯一订单号，必填
            String out_trade_no = new String("" + System.currentTimeMillis());
            // 付款金额，必填
            String total_amount = new String(allprice);
            // 订单名称，必填
            String subject = new String("座位号：" + seats);
            // 商品描述，可空
            String body = new String("PE影城");

            alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"total_amount\":\"" + total_amount
                    + "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"" + body + "\","
                    + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

            // 若想给BizContent增加其他可选请求参数，以增加自定义超时时间参数timeout_express来举例说明
            // alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
            // + "\"total_amount\":\""+ total_amount +"\","
            // + "\"subject\":\""+ subject +"\","
            // + "\"body\":\""+ body +"\","
            // + "\"timeout_express\":\"10m\","
            // + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
            // 请求参数可查阅【电脑网站支付的API文档-alipay.trade.page.pay-请求参数】章节

            // 请求
            String result = null;
            try {
                result = alipayClient.pageExecute(alipayRequest).getBody();

            } catch (AlipayApiException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            // 输出


            md.setViewName("Alipay");
            md.addObject("result", result);
            return md;
        }


}
